Lab 05a - Usługi w Linuksie
Usługi w Linuksie
Wprowadzenie do zarządzania usługami w systemie Linux
W tle Linuksa stale działa wiele usług, takich jak usługi sieciowe i systemowe. Usługi działające w systemie Linux są również znane jako daemony.
systemd
jest pakietem narzędzi wykorzystywanych przez większość współczesnych dystrybucji Linuksa. Wszystkie zadania systemowe mogą być kontrolowane poprzez systemd
. Proces może być uruchomiony lub zakończony za pomocą tego narzędzia. Można również za jego pomocą wyświetlić wszystkie włączone i wyłączone usługi wraz z informacjami o nich.
Listowanie usług za pomocą systemctl
Najprostszym sposobem na wylistowanie usług w Linuksie, gdy system wykorzystuje systemd
, jest użycie polecenia systemctl
, po którym następuje komenda list-units
. Można dodać opcję --type=service
w celu ograniczenia wyników tylko do usług.
systemctl list-units --type=service
Aby wyświetlić listę wszystkich usług, zarówno aktywnych jak i nieaktywnych, należy użyć polecenia systemctl list-units
, a następnie opcji --all
:
systemctl list-units --type=service --all
Uruchamianie usług
systemctl start [service_name]
Zatrzymywanie usług
systemctl stop [service_name]
Włączenie uruchamiania usługi podczas startu systemu
systemctl enable [service_name]
Wyłączenie uruchamiania usługi podczas startu systemu
systemctl disable [service_name]
Sprawdzanie statusu usługi
systemctl status [service_name]
Przeglądanie logów produkowanych przez usługi
Logi produkowane przez różne usługi są zapisywane przez systemd
poprzez daemona journald
. Aby zobaczyć logi, które zebrał daemon journald
, użyj polecenia journalctl
.
Kiedy komenda jest użyta samodzielnie, każdy wpis w dzienniku będzie wyświetlony w pagerze (zazwyczaj mniejszym) do przeglądania. Najstarsze wpisy będą na górze:
journalctl
Prawdopodobnie w dzienniku znajduje się spora liczba komunikatów (dziesiątki lub setki tysięcy linii). To pokazuje jak wiele logów znajduje się w bazie.
Wyświetlanie logów z bieżącego startu
Dodanie flagi -b
do journalctl
spowoduje filtrowanie logów, pokazując tylko dane zalogowane od ostatniego restartu systemu:
journalctl -b
Przeglądanie logów produkowanych przez konkretną usługę
journalctl -u [nazwa_usługi]
Tworzenie własnych usług w Linuksie
Czasami chcemy, żeby napisana aplikacja była kontrolowana przez systemd
. W niektórych przypadkach warto, aby skrypt był uruchamiany ponownie, gdy zostanie zabity z jakiegoś powodu. W takich przypadkach systemd
jest dobrym rozwiązaniem.
Utwórz plik o nazwie
[nazwa_usługi].service
w/etc/systemd/system
używając następującego szablonu:[Unit] Description=Opis uslugi [Service] User=nazwa_uzytkownika (np. root) ExecStart=bezwzgledna_sciezka_do_skryptu (np. /home/student/Desktop/script.sh) Restart=always [Install] WantedBy=multi-user.target
Dla projektów języka Python, które wykorzystują środowisko wirtualne:
[Unit] Description=Opis uslugi [Service] User=nazwa_uzytkownika (np. root) ExecStart=/home/user/virtualenv/bin/python main.py Restart=always # zastąp /home/user/virtualenv/bin/python swoim virtualenv i main.py swoim skryptem [Install] WantedBy=multi-user.target
Nadaj prawa do wykonywania skryptu poleceniem
chmod +x nazwa_skryptu
Przeładuj pliki usług, aby uwzględnić nową usługę:
sudo systemctl daemon-reload
Uruchom swoją usługę:
sudo systemctl start your-service.service
Przykładowy serwis i skrypt:
my_service.service:
[Unit]
Description=Opis uslugi
[Service]
User=jakub
ExecStart=/usr/bin/python3 /home/jakub/Desktop/print_messages.py
Restart=always
[Install]
WantedBy=multi-user.target
print_messages.py:
#!/usr/bin/env python3
import time
if __name__ == '__main__':
while True:
print('Hello world')
1) time.sleep(
lub dla basha:
#!/bin/bash
while $(sleep 1);
do
echo "hello world"
done
Tworząc własny skrypt, upewnij się, że umieściłeś w nim shebang line (pierwszą linijkę w powyższych przykładach).
🛠🔥 Zadanie 1 🛠🔥
Utwórz skrypt w Pythonie o nazwie print_messages.py
. Zawartość pliku została przedstawiona w poprzedniej części instrukcji. Uruchom skrypt z poziomu terminala z dwóch różnych lokalizacji:
- lokalizacji, w której znajduje się utworzony skrypt,
- z lokalizacji
/etc/systemd/system
🛠🔥 Zadanie 2 🛠🔥
Utwórz usługę my_service.service
. Zawartość pliku została przedstawiona w poprzedniej części instrukcji. Zrealizuj uruchomienie usługi.
🛠🔥 Zadanie 3 🛠🔥
Napisz aplikację w języku Python, która korzysta z biblioteki click. CLI (command line interface) aplikacji powinien przyjąć ścieżkę do jakiegoś pliku i czas w sekundach (tutaj nazwijmy go n
). Aplikacja powinna zapisywać losową liczbę wraz z aktualnym czasem do podanego pliku co n
sekund.
Napisz plik usługi, który będzie uruchamiał Twoją aplikację. Spróbuj dodać kilka instrukcji print
w swoim kodzie, abyś mógł sprawdzić czy logi są zbierane poprawnie. Włącz (enable) i uruchom (start) swoją nową usługę. Sprawdź status i logi. Spróbuj zrestartować swój system. Usługa powinna uruchomić się automatycznie.
Możesz chcieć stworzyć wirtualne środowisko (venv
) i zainstalować w nim bibliotekę click
.
Zakończ zadanie zatrzymując i wyłączając usługę. Usuń plik usługi z /etc/systemd/system
. Zapisz swój kod, ponieważ wykorzystasz go na kolejnych zajęciach.